#!/bin/bash

cvc4=./cvc4
bench="$1"
let "to = $2 - 60"

file=${bench##*/}
filename=${file%.*}

# use: trywith [params..]
# to attempt a run.  Only thing printed on stdout is "sat" or "unsat", in
# which case this run script terminates immediately.  Otherwise, this
# function returns normally.
function trywith {
  result="$( ulimit -t "$1";shift;$cvc4 -L tptp --szs-compliant --no-checking --no-interactive "$@" $bench)"
  case "$result" in
    sat) echo "% SZS status" "Satisfiable for $filename"; exit 0;;
    unsat) echo "% SZS status" "Unsatisfiable for $filename"; exit 0;;
    conjecture-sat) echo "% SZS status" "CounterSatisfiable for $filename"; exit 0;;
    conjecture-unsat) echo "% SZS status" "Theorem for $filename"; exit 0;;
  esac
}
function finishwith {
  result="$( $cvc4 -L tptp --szs-compliant --no-checking --no-interactive "$@" $bench)"
  case "$result" in
    sat) echo "% SZS status" "Satisfiable for $filename"; exit 0;;
    unsat) echo "% SZS status" "Unsatisfiable for $filename"; exit 0;;
    conjecture-sat) echo "% SZS status" "CounterSatisfiable for $filename"; exit 0;;
    conjecture-unsat) echo "% SZS status" "Theorem for $filename"; exit 0;;
  esac
}

trywith 30 --finite-model-find --uf-ss-totality
trywith 30 --finite-model-find --decision=justification --fmf-fmc
trywith $to --finite-model-find --decision=justification
echo "% SZS status" "GaveUp for $filename"
